home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 October: Mac OS SDK / Dev.CD Oct 00 SDK1.toast / Development Kits / Mac OS / AIAT / Headers / Accessor / RankedAccessor.h < prev    next >
Encoding:
Text File  |  1998-04-16  |  4.2 KB  |  132 lines  |  [TEXT/CWIE]

  1. // RankedAccessor.h
  2. //    Copyright:    © 1994 - 1996-1997 - 1998 by Apple Computer, Inc., all rights reserved.
  3. /// abstract accessessor that defines interface for ranked searching,
  4. /// whether with a vector or an inverted index.
  5. #pragma once
  6.  
  7. #ifndef RankedAccessor_h
  8. #define RankedAccessor_h
  9.  
  10. #pragma import on
  11.  
  12. #if PRAGMA_STRUCT_ALIGN
  13.     #pragma options align=power
  14. #endif
  15.  
  16. #include "IAAccessor.h"
  17. #include "TermIndex.h"
  18.  
  19. #pragma IA_BEGIN_EXPORTS
  20.  
  21. struct RankedQueryDoc {                // have to know which index each document belongs to
  22.                 RankedQueryDoc();
  23.                 RankedQueryDoc(IADoc* doc, TermIndex* index);
  24.     IADoc*        doc;
  25.     TermIndex*    index;
  26. };
  27.  
  28. class RankedHit : public IAHit {
  29. public:
  30.                     RankedHit(IAIndex* i, IADoc* d, float s, IATerm** ts, uint32 l);
  31.                     ~RankedHit();            // deletes matchingTerms
  32.  
  33.     RankedHit*        DeepCopy() const;        // copies matchingTerms
  34.     
  35.     void            SetScore(float value){score = value;}
  36.     float            GetScore() const {return score;}
  37.     IATerm**        GetMatchingTerms() const {return matchingTerms;}
  38.     uint32            GetMatchingTermsLen() const {return matchingTermsLen;}
  39.     
  40.  
  41. private:
  42.                     RankedHit(RankedHit&);
  43.     float            score;
  44.     IATerm**        matchingTerms;            // top scoring terms in intersection of doc w/ query
  45.     uint32            matchingTermsLen;
  46.     
  47.  
  48. };
  49.  
  50. class RankedProgress : public IAProgressReport {
  51. public:
  52.                     RankedProgress() : fTerm(NULL), IAProgressReport() {}
  53.     IA_INLINE        ~RankedProgress() IA_INLINE_DEF()                // no-op dtor def
  54.     IATerm*            GetTerm() const {return fTerm;}
  55.     void            SetTerm(IATerm* term) {fTerm = term;}
  56. private:
  57.     IATerm*            fTerm;    // when non-NULL, names term currently being processed.
  58. };
  59. typedef bool RankedProgressFn(const RankedProgress* progress, void* data);
  60.  
  61. class Similarity;
  62. class IAQuery;
  63. class WeightedTermQueue;
  64.  
  65. class RankedAccessor : public IAAccessor {
  66. public:
  67.         RankedAccessor(IAIndex** indices, uint32 indexCount, uint32 type);
  68.         ~RankedAccessor();
  69.  
  70.     virtual uint32    RankedSearch(byte*                 textQuery,     uint32     textQueryLen,
  71.                                  RankedQueryDoc*        docQuery,     uint32     nDocs,
  72.                                  RankedHit**            results,    uint32    resultLen,
  73.                                  uint32                matchingTermsLen,
  74.                                 RankedProgressFn*    progressFn,
  75.                                  clock_t                progressFreq,
  76.                                  void*                appData) = 0;
  77.  
  78.     virtual uint32    RankedSearch(IADocText*         textQuery,
  79.                                  RankedQueryDoc*        docQuery,     uint32     nDocs,
  80.                                  RankedHit**            results,    uint32    resultLen,
  81.                                  uint32                matchingTermsLen,
  82.                                 RankedProgressFn*    progressFn,
  83.                                  clock_t                progressFreq,
  84.                                  void*                appData) = 0;
  85.  
  86.     virtual uint32    GetDocTopic(RankedQueryDoc*        doc,
  87.                                  IATerm**            results,    uint32    resultLen,
  88.                                 RankedProgressFn*    progressFn,
  89.                                  clock_t                progressFreq,
  90.                                  void*                appData);
  91.  
  92.     virtual uint32    GetTermsRelated(byte*             term,     uint32     termLen,
  93.                                  IATerm**            results,    uint32    resultLen,
  94.                                 RankedProgressFn*    progressFn,
  95.                                  clock_t                progressFreq,
  96.                                  void*                appData);
  97.  
  98.     // called to filter hits -- default always returns true
  99.     virtual bool        IsHit(IAIndex* index, const IADoc* doc);
  100.     // determines merging of hits -- defaults are d1->LessThan(d2) and d1->Equal(d2)
  101.     virtual bool        HitLessThan(IAIndex* i1, const IADoc* d1, IAIndex* i2, const IADoc* d2);
  102.     virtual bool        HitEqual(IAIndex* i1, const IADoc* d1, IAIndex* i2, const IADoc* d2);
  103.     // merges hits that are HitEqual() into one hit -- default copies higher scoring
  104.     virtual RankedHit*    MergeHits(const RankedHit* hit1, const RankedHit* hit2);
  105. protected:
  106.     Similarity*            GetSimilarity() const {return sim;}
  107.     // default constructor etc. so that this can be a virtual base class
  108.                         RankedAccessor();
  109.     void                Constructing(IAIndex** indices, uint32 indexCount, uint32 type);
  110.     bool                IsRankedCoordinated() const {return RankedCoordination;}
  111.     void                SetRankedCoordination(bool coord = true) {RankedCoordination = coord;}
  112.     void                SetRankedCoordinationDegree(float deg);
  113.     float                GetRankedCoordinationDegree() const;
  114. private:
  115.     uint32                GetDocTopicInternal(RankedQueryDoc*        doc,
  116.                                  WeightedTermQueue* results, uint32    resultLen,
  117.                                 RankedProgressFn*    progressFn,
  118.                                  clock_t                progressFreq,
  119.                                  void*                appData);
  120.  
  121.     Similarity*            sim;
  122.     bool        RankedCoordination;       // Determines whether short queries use coordination ranking.
  123. };
  124.  
  125. #pragma IA_END_EXPORTS
  126.  
  127. #if PRAGMA_STRUCT_ALIGN
  128.     #pragma options align=reset
  129. #endif
  130.  
  131. #pragma import reset
  132. #endif